import router from './router'
import store from './store'
import { Message } from 'element-ui'
import NProgress from 'nprogress' // 进度条
import 'nprogress/nprogress.css' // 进度条style
import { getToken, getLoginType } from '@/utils/auth' // get token from cookie
import getPageTitle from '@/utils/get-page-title'
NProgress.configure({ showSpinner: false }) // 进度条配置

const whiteList = ['/main', '/login', '/register', '/forget-password', '/EnterpriseRegister', '/noticeDetail', '/noticeDetailApp', '/noticeList'] // 重定向白名单
// 登录或刷新主页面时，请求后台数据标识：默认未发送
let sendFlag = false
router.beforeEach(async(to, from, next) => {
  // 页面进度条开始
  NProgress.start()
  // 页面的标题
  document.title = getPageTitle(to.meta.title)

  // 确定用户是否已登录
  const hasToken = getToken()
  const loginType = getLoginType()
  if (hasToken) {
    if (to.path === '/login') {
      next({ path: '/' })
      NProgress.done()
    } else {
      // 1.用户账号登录跳转个人中心
      if (loginType === '1') {
        if (to.path !== '/index') {
          await store.dispatch('user/getAccountInfo')
          next()
        } else {
          next('/profile/profile')
        }
      } else {
        if (store.getters.menu.length > 0) { // 2.人员账号登录跳转首页(有菜单)
          next()
        } else {
          // 人员账号：请求过菜单数据&&没有分配菜单权限 => 跳转个人中心
          if (sendFlag) {
            to.path !== '/index' ? next() : next('/profile/profile')
          } else {
            try {
              await store.dispatch('basicInfo/getDicts') // 个人字典
              await store.dispatch('basicInfo/getSysDicts') // 系统字典
              await store.dispatch('user/getInfo') // 获取个人信息
              sendFlag = true
              next({ ...to, replace: true })
            } catch (error) {
              await store.dispatch('user/resetToken') // 删除令牌，进入登录页面重新登录
              Message.error(error.message || '获取失败')
              next(`/login?redirect=${to.path}`)
              NProgress.done()
            }
          }
        }
      }
    }
  } else {
    /* 没有token*/
    if (whiteList.indexOf(to.path) !== -1) {
      // 在免费登录白名单中，直接进入
      next()
    } else {
      // 其他没有访问权限的页面将被重定向到登录页面
      next(`/main?redirect=${to.path}`)
      NProgress.done()
    }
  }
})

router.afterEach(() => {
  // 完成进度条
  NProgress.done()
})
